<?php

/**
 * This is the model class for table "cliente".
 *
 * The followings are the available columns in table 'cliente':
 * @property integer $idCliente
 * @property string $cedula
 * @property string $nombre
 * @property string $apellido1
 * @property string $apellido2
 * @property string $telHabitacion
 * @property string $telOficina
 * @property string $direccion
 * @property integer $idCanton
 * @property string $ocupacion
 * @property integer $idDoctor
 * @property string $contactoNombre
 * @property string $contactoParentesco
 * @property string $contactoTelefono
 * @property string $correo
 * @property string $sexo
 * @property string $observaciones
 * @property integer $idUsuario
 * @property string $Estado
 *
 * The followings are the available model relations:
 * @property Cita[] $citas
 * @property Doctor $idDoctor0
 * @property Canton $idCanton0
 * @property Usuario $idUsuario0
 * @property Historialrespuestas[] $historialrespuestases
 * @property Notificacionescliente[] $notificacionesclientes
 */
class Cliente extends CActiveRecord
{

	public static $generos= array('m'=>'masculino', 'f'=>'femenino');
	public static $estadoCivil= array('s'=>'Soltero/a', 'c'=>'Casado/a', 'u'=>'Union Libre',
									  'd'=>'Divorciado/a', 'v'=>'Viudo/a');
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return Cliente the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'cliente';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('cedula, nombre, apellido1, apellido2, telHabitacion, direccion, 
					idCanton, ocupacion, idDoctor, correo, contactoNombre, contactoParentesco, 
					contactoTelefono, sexo, Estado', 'required', 'message'=>'Favor llenar el campo \'{attribute}\' pues es requerido'),
			array('idCanton, idDoctor, idUsuario', 'numerical', 'integerOnly'=>true),
			array('cedula', 'length', 'max'=>9, 'min'=>9, 
				  'tooShort'=>'La cédula debe tener al menos 9 números.<br><i>Ejemplos de formato: <font color=blue><i>101110444 ó 233334444.<br>',
				  ),
			array('cedula', 'numerical', 'integerOnly'=>true, 'message'=>'El campo \'Cédula\' solo permite números sin espacios ni caracteres especiales. 
																		 <br><i>Ejemplos de formato: <font color=blue>101110444 ó 233334444.'),
			array('cedula', 'validacionCliente'),
			array('telHabitacion, contactoTelefono, telOficina',				  
				  'numerical', 'integerOnly'=>true, 'message'=>'El campo \'{attribute}\' solo permite números sin espacios ni caracteres especiales. 
																		 <br><i>Ejemplos de formato: <font color=blue>85551234 ó 25551234.<br>'),
			array('nombre, apellido1, apellido2, ocupacion, contactoNombre, contactoParentesco, correo', 'length', 'max'=>50),
			array('direccion', 'length', 'max'=>100),
			array('sexo, Estado', 'length', 'max'=>1),
			array('observaciones', 'length', 'max'=>300),
			array('telHabitacion,contactoTelefono,telOficina', 'length', 'max'=>8, 'min'=>8,
				  'tooShort'=>'La cédula debe tener al menos 9 números.<br><i>Ejemplos de formato: <font color=blue>85551234 ó 25551234.',
				  ),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('idCliente, cedula, nombre, apellido1, apellido2, telHabitacion, telOficina, direccion, idCanton, ocupacion, idDoctor, contactoNombre, contactoParentesco, contactoTelefono, correo, sexo, observaciones, idUsuario, Estado', 'safe', 'on'=>'search'),
		);
	}



	
	/*
	* funcion para validar el campo 'cedula'
	*/	
	public function validacionCliente($attribute,$params){
		
		$existeCliente = Cliente::model()->findByAttributes(array('cedula'=>$this->cedula));
		
		/*
		Revisa si el cliente ya existe en la BD. Si existe envia un error al formulario
		*/
		if(!$existeCliente==null)
			$this->addError('cedula','Un cliente con esta cédula ya existe en nuestro sistema. 
			Favor revisar y re-intentar. 
			<br><br>Si esté seguro que el número de cédula esta correcto, 
			entonces por favor haga click <a href=\'/cliente/recuperarPwd\'>aquí</a> para confirmar su identidad
			ó contactenos al teléfono: 2434-1185');
	}
	
	// select centralizado de valores para el campo cliente.sexo
	 public static function getSexos($g=null){
	 
		if($g!==null)
			return self::$generos[$g];
		return self::$generos;
	 }
	
	// select centralizado de valores para el campo cliente.estado
	 public static function getEstadoCivil($e=null){
	 
		if($e!==null)
			return self::$estadoCivil[$e];
		return self::$estadoCivil;
	 }
	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'relcitas' => array(self::HAS_MANY, 'Cita', 'idCliente'),
			'reldoctor' => array(self::BELONGS_TO, 'Doctor', 'idDoctor'),
			'relcanton' => array(self::BELONGS_TO, 'Canton', 'idCanton'),
			'relusuario' => array(self::BELONGS_TO, 'Usuario', 'idUsuario'),
			'relpreguntas' => array(self::MANY_MANY, 'Preguntaseguridad', 'clientepreguntaseguridad(idCliente, idPreguntaSeguridad)'),
			'relnotificaciones' => array(self::HAS_MANY, 'Notificacionescliente', 'idCliente'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'idCliente' => 'Cliente Número',
			'cedula' => 'Número de Cédula',
			'nombre' => 'Nombre',
			'apellido1' => '1er Apellido',
			'apellido2' => '2do Apellido',
			'telHabitacion' => 'Tel Habitación',
			'telOficina' => 'Tel Oficina',
			'direccion' => 'Dirección',
			'idCanton' => 'Cantón',
			'ocupacion' => 'Ocupación',
			'idDoctor' => 'Doctor Preferido',
			'contactoNombre' => 'Contacto de Emergencia',
			'contactoParentesco' => 'Parentesco',
			'contactoTelefono' => 'Teléfono',
			'correo' => 'Correo Electrónico',
			'sexo' => 'Sexo',
			'observaciones' => 'Observaciones',
			'idUsuario' => 'Usuario',
			'Estado' => 'Estado Civil',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('idCliente',$this->idCliente);
		$criteria->compare('cedula',$this->cedula,true);
		$criteria->compare('nombre',$this->nombre,true);
		$criteria->compare('apellido1',$this->apellido1,true);
		$criteria->compare('apellido2',$this->apellido2,true);
		$criteria->compare('telHabitacion',$this->telHabitacion,true);
		$criteria->compare('telOficina',$this->telOficina,true);
		$criteria->compare('direccion',$this->direccion,true);
		$criteria->compare('idCanton',$this->idCanton);
		$criteria->compare('ocupacion',$this->ocupacion,true);
		$criteria->compare('idDoctor',$this->idDoctor);
		$criteria->compare('contactoNombre',$this->contactoNombre,true);
		$criteria->compare('contactoParentesco',$this->contactoParentesco,true);
		$criteria->compare('contactoTelefono',$this->contactoTelefono,true);
		$criteria->compare('correo',$this->correo,true);
		$criteria->compare('sexo',$this->sexo,true);
		$criteria->compare('observaciones',$this->observaciones,true);
		$criteria->compare('idUsuario',$this->idUsuario);
		$criteria->compare('Estado',$this->Estado,true);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,
		));
	}
}